// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Proximity Beacon API Version v1beta1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://developers.google.com/beacons/proximity/'>Google Proximity Beacon API</a>
 *      <tr><th>API Version<td>v1beta1
 *      <tr><th>API Rev<td>20170320 (809)
 *      <tr><th>API Docs
 *          <td><a href='https://developers.google.com/beacons/proximity/'>
 *              https://developers.google.com/beacons/proximity/</a>
 *      <tr><th>Discovery Name<td>proximitybeacon
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Proximity Beacon API can be found at
 * <a href='https://developers.google.com/beacons/proximity/'>https://developers.google.com/beacons/proximity/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.Proximitybeacon.v1beta1
{
    /// <summary>The Proximitybeacon Service.</summary>
    public class ProximitybeaconService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1beta1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public ProximitybeaconService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public ProximitybeaconService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            beaconinfo = new BeaconinfoResource(this);
            beacons = new BeaconsResource(this);
            namespaces = new NamespacesResource(this);
            v1beta1 = new V1beta1Resource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "proximitybeacon"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://proximitybeacon.googleapis.com/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return ""; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google Proximity Beacon API.</summary>
        public class Scope
        {
            /// <summary>View and modify your beacons</summary>
            public static string UserlocationBeaconRegistry = "https://www.googleapis.com/auth/userlocation.beacon.registry";

        }



        private readonly BeaconinfoResource beaconinfo;

        /// <summary>Gets the Beaconinfo resource.</summary>
        public virtual BeaconinfoResource Beaconinfo
        {
            get { return beaconinfo; }
        }

        private readonly BeaconsResource beacons;

        /// <summary>Gets the Beacons resource.</summary>
        public virtual BeaconsResource Beacons
        {
            get { return beacons; }
        }

        private readonly NamespacesResource namespaces;

        /// <summary>Gets the Namespaces resource.</summary>
        public virtual NamespacesResource Namespaces
        {
            get { return namespaces; }
        }

        private readonly V1beta1Resource v1beta1;

        /// <summary>Gets the V1beta1 resource.</summary>
        public virtual V1beta1Resource V1beta1
        {
            get { return v1beta1; }
        }
    }

    ///<summary>A base abstract class for Proximitybeacon requests.</summary>
    public abstract class ProximitybeaconBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new ProximitybeaconBaseServiceRequest instance.</summary>
        protected ProximitybeaconBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>V1 error format.</summary>
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }

        /// <summary>V1 error format.</summary>
        public enum XgafvEnum
        {
            /// <summary>v1 error format</summary>
            [Google.Apis.Util.StringValueAttribute("1")]
            Value1,
            /// <summary>v2 error format</summary>
            [Google.Apis.Util.StringValueAttribute("2")]
            Value2,
        }

        /// <summary>OAuth access token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// <summary>Data format for response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
            /// <summary>Media download with context-dependent Content-Type</summary>
            [Google.Apis.Util.StringValueAttribute("media")]
            Media,
            /// <summary>Responses with Content-Type of application/x-protobuf</summary>
            [Google.Apis.Util.StringValueAttribute("proto")]
            Proto,
        }

        /// <summary>OAuth bearer token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("bearer_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string BearerToken { get; set; }

        /// <summary>JSONP</summary>
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Pretty-print response.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("pp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> Pp { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// <summary>Initializes Proximitybeacon parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "$.xgafv", new Google.Apis.Discovery.Parameter
                {
                    Name = "$.xgafv",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "access_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "access_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "bearer_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "bearer_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "callback", new Google.Apis.Discovery.Parameter
                {
                    Name = "callback",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "pp", new Google.Apis.Discovery.Parameter
                {
                    Name = "pp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "uploadType", new Google.Apis.Discovery.Parameter
                {
                    Name = "uploadType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "upload_protocol", new Google.Apis.Discovery.Parameter
                {
                    Name = "upload_protocol",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "beaconinfo" collection of methods.</summary>
    public class BeaconinfoResource
    {
        private const string Resource = "beaconinfo";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public BeaconinfoResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Given one or more beacon observations, returns any beacon information and attachments accessible to
        /// your application. Authorize by using the [API key](https://developers.google.com/beacons/proximity/how-
        /// tos/authorizing#APIKey) for the application.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual GetforobservedRequest Getforobserved(Google.Apis.Proximitybeacon.v1beta1.Data.GetInfoForObservedBeaconsRequest body)
        {
            return new GetforobservedRequest(service, body);
        }

        /// <summary>Given one or more beacon observations, returns any beacon information and attachments accessible to
        /// your application. Authorize by using the [API key](https://developers.google.com/beacons/proximity/how-
        /// tos/authorizing#APIKey) for the application.</summary>
        public class GetforobservedRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.GetInfoForObservedBeaconsResponse>
        {
            /// <summary>Constructs a new Getforobserved request.</summary>
            public GetforobservedRequest(Google.Apis.Services.IClientService service, Google.Apis.Proximitybeacon.v1beta1.Data.GetInfoForObservedBeaconsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Proximitybeacon.v1beta1.Data.GetInfoForObservedBeaconsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getforobserved"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/beaconinfo:getforobserved"; }
            }

            /// <summary>Initializes Getforobserved parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "beacons" collection of methods.</summary>
    public class BeaconsResource
    {
        private const string Resource = "beacons";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public BeaconsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            attachments = new AttachmentsResource(service);
            diagnostics = new DiagnosticsResource(service);

        }

        private readonly AttachmentsResource attachments;

        /// <summary>Gets the Attachments resource.</summary>
        public virtual AttachmentsResource Attachments
        {
            get { return attachments; }
        }

        /// <summary>The "attachments" collection of methods.</summary>
        public class AttachmentsResource
        {
            private const string Resource = "attachments";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public AttachmentsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Deletes multiple attachments on a given beacon. This operation is permanent and cannot be
            /// undone.
            ///
            /// You can optionally specify `namespacedType` to choose which attachments should be deleted. If you do not
            /// specify `namespacedType`,  all your attachments on the given beacon will be deleted. You also may
            /// explicitly specify `*` to delete all.
            ///
            /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from
            /// a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
            /// project.</summary>
            /// <param name="beaconName">The beacon whose attachments should be deleted. A beacon name has the format
            /// "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's
            /// type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For
            /// Eddystone-EID beacons, you may use either the current EID or the beacon's "stable" UID. Required.</param>
            public virtual BatchDeleteRequest BatchDelete(string beaconName)
            {
                return new BatchDeleteRequest(service, beaconName);
            }

            /// <summary>Deletes multiple attachments on a given beacon. This operation is permanent and cannot be
            /// undone.
            ///
            /// You can optionally specify `namespacedType` to choose which attachments should be deleted. If you do not
            /// specify `namespacedType`,  all your attachments on the given beacon will be deleted. You also may
            /// explicitly specify `*` to delete all.
            ///
            /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from
            /// a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
            /// project.</summary>
            public class BatchDeleteRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.DeleteAttachmentsResponse>
            {
                /// <summary>Constructs a new BatchDelete request.</summary>
                public BatchDeleteRequest(Google.Apis.Services.IClientService service, string beaconName)
                    : base(service)
                {
                    BeaconName = beaconName;
                    InitParameters();
                }


                /// <summary>The beacon whose attachments should be deleted. A beacon name has the format
                /// "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for
                /// the beacon's type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for
                /// iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may use either the current EID or the
                /// beacon's "stable" UID. Required.</summary>
                [Google.Apis.Util.RequestParameterAttribute("beaconName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string BeaconName { get; private set; }

                /// <summary>The project id to delete beacon attachments under. This field can be used when "*" is
                /// specified to mean all attachment namespaces. Projects may have multiple attachments with multiple
                /// namespaces. If "*" is specified and the projectId string is empty, then the project making the
                /// request is used. Optional.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string ProjectId { get; set; }

                /// <summary>Specifies the namespace and type of attachments to delete in `namespace/type` format.
                /// Accepts `*` to specify "all types in all namespaces". Optional.</summary>
                [Google.Apis.Util.RequestParameterAttribute("namespacedType", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string NamespacedType { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "batchDelete"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+beaconName}/attachments:batchDelete"; }
                }

                /// <summary>Initializes BatchDelete parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "beaconName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "beaconName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^beacons/[^/]+$",
                        });
                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "namespacedType", new Google.Apis.Discovery.Parameter
                        {
                            Name = "namespacedType",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Associates the given data with the specified beacon. Attachment data must contain two parts:
            ///
            /// A namespaced type. The actual attachment data itself.
            ///
            /// The namespaced type consists of two parts, the namespace and the type. The namespace must be one of the
            /// values returned by the `namespaces` endpoint, while the type can be a string of any characters except
            /// for the forward slash (`/`) up to 100 characters in length.
            ///
            /// Attachment data can be up to 1024 bytes long.
            ///
            /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from
            /// a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
            /// project.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="beaconName">Beacon on which the attachment should be created. A beacon name has the format
            /// "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's
            /// type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For
            /// Eddystone-EID beacons, you may use either the current EID or the beacon's "stable" UID. Required.</param>
            public virtual CreateRequest Create(Google.Apis.Proximitybeacon.v1beta1.Data.BeaconAttachment body, string beaconName)
            {
                return new CreateRequest(service, body, beaconName);
            }

            /// <summary>Associates the given data with the specified beacon. Attachment data must contain two parts:
            ///
            /// A namespaced type. The actual attachment data itself.
            ///
            /// The namespaced type consists of two parts, the namespace and the type. The namespace must be one of the
            /// values returned by the `namespaces` endpoint, while the type can be a string of any characters except
            /// for the forward slash (`/`) up to 100 characters in length.
            ///
            /// Attachment data can be up to 1024 bytes long.
            ///
            /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from
            /// a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
            /// project.</summary>
            public class CreateRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.BeaconAttachment>
            {
                /// <summary>Constructs a new Create request.</summary>
                public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Proximitybeacon.v1beta1.Data.BeaconAttachment body, string beaconName)
                    : base(service)
                {
                    BeaconName = beaconName;
                    Body = body;
                    InitParameters();
                }


                /// <summary>Beacon on which the attachment should be created. A beacon name has the format
                /// "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for
                /// the beacon's type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for
                /// iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may use either the current EID or the
                /// beacon's "stable" UID. Required.</summary>
                [Google.Apis.Util.RequestParameterAttribute("beaconName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string BeaconName { get; private set; }

                /// <summary>The project id of the project the attachment will belong to. If the project id is not
                /// specified then the project making the request is used. Optional.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string ProjectId { get; set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.Proximitybeacon.v1beta1.Data.BeaconAttachment Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "create"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+beaconName}/attachments"; }
                }

                /// <summary>Initializes Create parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "beaconName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "beaconName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^beacons/[^/]+$",
                        });
                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Deletes the specified attachment for the given beacon. Each attachment has a unique attachment
            /// name (`attachmentName`) which is returned when you fetch the attachment data via this API. You specify
            /// this with the delete request to control which attachment is removed. This operation cannot be undone.
            ///
            /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from
            /// a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
            /// project.</summary>
            /// <param name="attachmentName">The attachment name (`attachmentName`) of the attachment to remove. For example:
            /// `beacons/3!893737abc9/attachments/c5e937-af0-494-959-ec49d12738`. For Eddystone-EID beacons, the beacon ID portion
            /// (`3!893737abc9`) may be the beacon's current EID, or its "stable" Eddystone-UID. Required.</param>
            public virtual DeleteRequest Delete(string attachmentName)
            {
                return new DeleteRequest(service, attachmentName);
            }

            /// <summary>Deletes the specified attachment for the given beacon. Each attachment has a unique attachment
            /// name (`attachmentName`) which is returned when you fetch the attachment data via this API. You specify
            /// this with the delete request to control which attachment is removed. This operation cannot be undone.
            ///
            /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from
            /// a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
            /// project.</summary>
            public class DeleteRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.Empty>
            {
                /// <summary>Constructs a new Delete request.</summary>
                public DeleteRequest(Google.Apis.Services.IClientService service, string attachmentName)
                    : base(service)
                {
                    AttachmentName = attachmentName;
                    InitParameters();
                }


                /// <summary>The attachment name (`attachmentName`) of the attachment to remove. For example:
                /// `beacons/3!893737abc9/attachments/c5e937-af0-494-959-ec49d12738`. For Eddystone-EID beacons, the
                /// beacon ID portion (`3!893737abc9`) may be the beacon's current EID, or its "stable" Eddystone-UID.
                /// Required.</summary>
                [Google.Apis.Util.RequestParameterAttribute("attachmentName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string AttachmentName { get; private set; }

                /// <summary>The project id of the attachment to delete. If not provided, the project that is making the
                /// request is used. Optional.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string ProjectId { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "delete"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "DELETE"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+attachmentName}"; }
                }

                /// <summary>Initializes Delete parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "attachmentName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "attachmentName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^beacons/[^/]+/attachments/[^/]+$",
                        });
                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Returns the attachments for the specified beacon that match the specified namespaced-type
            /// pattern.
            ///
            /// To control which namespaced types are returned, you add the `namespacedType` query parameter to the
            /// request. You must either use `*`, to return all attachments, or the namespace must be one of the ones
            /// returned from the  `namespaces` endpoint.
            ///
            /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from
            /// a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers
            /// Console project.</summary>
            /// <param name="beaconName">Beacon whose attachments should be fetched. A beacon name has the format
            /// "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's
            /// type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For
            /// Eddystone-EID beacons, you may use either the current EID or the beacon's "stable" UID. Required.</param>
            public virtual ListRequest List(string beaconName)
            {
                return new ListRequest(service, beaconName);
            }

            /// <summary>Returns the attachments for the specified beacon that match the specified namespaced-type
            /// pattern.
            ///
            /// To control which namespaced types are returned, you add the `namespacedType` query parameter to the
            /// request. You must either use `*`, to return all attachments, or the namespace must be one of the ones
            /// returned from the  `namespaces` endpoint.
            ///
            /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from
            /// a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers
            /// Console project.</summary>
            public class ListRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.ListBeaconAttachmentsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string beaconName)
                    : base(service)
                {
                    BeaconName = beaconName;
                    InitParameters();
                }


                /// <summary>Beacon whose attachments should be fetched. A beacon name has the format
                /// "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for
                /// the beacon's type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for
                /// iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may use either the current EID or the
                /// beacon's "stable" UID. Required.</summary>
                [Google.Apis.Util.RequestParameterAttribute("beaconName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string BeaconName { get; private set; }

                /// <summary>The project id to list beacon attachments under. This field can be used when "*" is
                /// specified to mean all attachment namespaces. Projects may have multiple attachments with multiple
                /// namespaces. If "*" is specified and the projectId string is empty, then the project making the
                /// request is used. Optional.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string ProjectId { get; set; }

                /// <summary>Specifies the namespace and type of attachment to include in response in namespace/type
                /// format. Accepts `*` to specify "all types in all namespaces".</summary>
                [Google.Apis.Util.RequestParameterAttribute("namespacedType", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string NamespacedType { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+beaconName}/attachments"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "beaconName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "beaconName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^beacons/[^/]+$",
                        });
                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "namespacedType", new Google.Apis.Discovery.Parameter
                        {
                            Name = "namespacedType",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }
        private readonly DiagnosticsResource diagnostics;

        /// <summary>Gets the Diagnostics resource.</summary>
        public virtual DiagnosticsResource Diagnostics
        {
            get { return diagnostics; }
        }

        /// <summary>The "diagnostics" collection of methods.</summary>
        public class DiagnosticsResource
        {
            private const string Resource = "diagnostics";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public DiagnosticsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>List the diagnostics for a single beacon. You can also list diagnostics for all the beacons
            /// owned by your Google Developers Console project by using the beacon name `beacons/-`.
            ///
            /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from
            /// a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers
            /// Console project.</summary>
            /// <param name="beaconName">Beacon that the diagnostics are for.</param>
            public virtual ListRequest List(string beaconName)
            {
                return new ListRequest(service, beaconName);
            }

            /// <summary>List the diagnostics for a single beacon. You can also list diagnostics for all the beacons
            /// owned by your Google Developers Console project by using the beacon name `beacons/-`.
            ///
            /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from
            /// a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers
            /// Console project.</summary>
            public class ListRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.ListDiagnosticsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string beaconName)
                    : base(service)
                {
                    BeaconName = beaconName;
                    InitParameters();
                }


                /// <summary>Beacon that the diagnostics are for.</summary>
                [Google.Apis.Util.RequestParameterAttribute("beaconName", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string BeaconName { get; private set; }

                /// <summary>Requests results that occur after the `page_token`, obtained from the response to a
                /// previous request. Optional.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>Specifies the maximum number of results to return. Defaults to 10. Maximum 1000.
                /// Optional.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }

                /// <summary>Requests only beacons that have the given alert. For example, to find beacons that have low
                /// batteries use `alert_filter=LOW_BATTERY`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("alertFilter", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<AlertFilterEnum> AlertFilter { get; set; }

                /// <summary>Requests only beacons that have the given alert. For example, to find beacons that have low
                /// batteries use `alert_filter=LOW_BATTERY`.</summary>
                public enum AlertFilterEnum
                {
                    [Google.Apis.Util.StringValueAttribute("ALERT_UNSPECIFIED")]
                    ALERTUNSPECIFIED,
                    [Google.Apis.Util.StringValueAttribute("WRONG_LOCATION")]
                    WRONGLOCATION,
                    [Google.Apis.Util.StringValueAttribute("LOW_BATTERY")]
                    LOWBATTERY,
                }

                /// <summary>Requests only diagnostic records for the given project id. If not set, then the project
                /// making the request will be used for looking up diagnostic records. Optional.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string ProjectId { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1beta1/{+beaconName}/diagnostics"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "beaconName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "beaconName",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = @"^beacons/[^/]+$",
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "alertFilter", new Google.Apis.Discovery.Parameter
                        {
                            Name = "alertFilter",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }

        /// <summary>Activates a beacon. A beacon that is active will return information and attachment data when
        /// queried via `beaconinfo.getforobserved`. Calling this method on an already active beacon will do nothing
        /// (but will return a successful response code).
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        /// <param name="beaconName">Beacon that should be activated. A beacon name has the format "beacons/N!beaconId" where
        /// the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3`
        /// for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may
        /// use either the current EID or the beacon's "stable" UID. Required.</param>
        public virtual ActivateRequest Activate(string beaconName)
        {
            return new ActivateRequest(service, beaconName);
        }

        /// <summary>Activates a beacon. A beacon that is active will return information and attachment data when
        /// queried via `beaconinfo.getforobserved`. Calling this method on an already active beacon will do nothing
        /// (but will return a successful response code).
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        public class ActivateRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.Empty>
        {
            /// <summary>Constructs a new Activate request.</summary>
            public ActivateRequest(Google.Apis.Services.IClientService service, string beaconName)
                : base(service)
            {
                BeaconName = beaconName;
                InitParameters();
            }


            /// <summary>Beacon that should be activated. A beacon name has the format "beacons/N!beaconId" where the
            /// beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values
            /// are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-
            /// EID beacons, you may use either the current EID or the beacon's "stable" UID. Required.</summary>
            [Google.Apis.Util.RequestParameterAttribute("beaconName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BeaconName { get; private set; }

            /// <summary>The project id of the beacon to activate. If the project id is not specified then the project
            /// making the request is used. The project id must match the project that owns the beacon.
            /// Optional.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProjectId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "activate"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/{+beaconName}:activate"; }
            }

            /// <summary>Initializes Activate parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "beaconName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "beaconName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^beacons/[^/]+$",
                    });
                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Deactivates a beacon. Once deactivated, the API will not return information nor attachment data for
        /// the beacon when queried via `beaconinfo.getforobserved`. Calling this method on an already inactive beacon
        /// will do nothing (but will return a successful response code).
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        /// <param name="beaconName">Beacon that should be deactivated. A beacon name has the format "beacons/N!beaconId" where
        /// the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3`
        /// for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may
        /// use either the current EID or the beacon's "stable" UID. Required.</param>
        public virtual DeactivateRequest Deactivate(string beaconName)
        {
            return new DeactivateRequest(service, beaconName);
        }

        /// <summary>Deactivates a beacon. Once deactivated, the API will not return information nor attachment data for
        /// the beacon when queried via `beaconinfo.getforobserved`. Calling this method on an already inactive beacon
        /// will do nothing (but will return a successful response code).
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        public class DeactivateRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.Empty>
        {
            /// <summary>Constructs a new Deactivate request.</summary>
            public DeactivateRequest(Google.Apis.Services.IClientService service, string beaconName)
                : base(service)
            {
                BeaconName = beaconName;
                InitParameters();
            }


            /// <summary>Beacon that should be deactivated. A beacon name has the format "beacons/N!beaconId" where the
            /// beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values
            /// are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-
            /// EID beacons, you may use either the current EID or the beacon's "stable" UID. Required.</summary>
            [Google.Apis.Util.RequestParameterAttribute("beaconName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BeaconName { get; private set; }

            /// <summary>The project id of the beacon to deactivate. If the project id is not specified then the project
            /// making the request is used. The project id must match the project that owns the beacon.
            /// Optional.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProjectId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "deactivate"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/{+beaconName}:deactivate"; }
            }

            /// <summary>Initializes Deactivate parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "beaconName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "beaconName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^beacons/[^/]+$",
                    });
                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Decommissions the specified beacon in the service. This beacon will no longer be returned from
        /// `beaconinfo.getforobserved`. This operation is permanent -- you will not be able to re-register a beacon
        /// with this ID again.
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        /// <param name="beaconName">Beacon that should be decommissioned. A beacon name has the format "beacons/N!beaconId"
        /// where the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values
        /// are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons,
        /// you may use either the current EID of the beacon's "stable" UID. Required.</param>
        public virtual DecommissionRequest Decommission(string beaconName)
        {
            return new DecommissionRequest(service, beaconName);
        }

        /// <summary>Decommissions the specified beacon in the service. This beacon will no longer be returned from
        /// `beaconinfo.getforobserved`. This operation is permanent -- you will not be able to re-register a beacon
        /// with this ID again.
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        public class DecommissionRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.Empty>
        {
            /// <summary>Constructs a new Decommission request.</summary>
            public DecommissionRequest(Google.Apis.Services.IClientService service, string beaconName)
                : base(service)
            {
                BeaconName = beaconName;
                InitParameters();
            }


            /// <summary>Beacon that should be decommissioned. A beacon name has the format "beacons/N!beaconId" where
            /// the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible
            /// values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For
            /// Eddystone-EID beacons, you may use either the current EID of the beacon's "stable" UID.
            /// Required.</summary>
            [Google.Apis.Util.RequestParameterAttribute("beaconName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BeaconName { get; private set; }

            /// <summary>The project id of the beacon to decommission. If the project id is not specified then the
            /// project making the request is used. The project id must match the project that owns the beacon.
            /// Optional.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProjectId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "decommission"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/{+beaconName}:decommission"; }
            }

            /// <summary>Initializes Decommission parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "beaconName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "beaconName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^beacons/[^/]+$",
                    });
                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Deletes the specified beacon including all diagnostics data for the beacon as well as any
        /// attachments on the beacon (including those belonging to other projects). This operation cannot be undone.
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        /// <param name="beaconName">Beacon that should be deleted. A beacon name has the format "beacons/N!beaconId" where the
        /// beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3` for
        /// Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may use
        /// either the current EID or the beacon's "stable" UID. Required.</param>
        public virtual DeleteRequest Delete(string beaconName)
        {
            return new DeleteRequest(service, beaconName);
        }

        /// <summary>Deletes the specified beacon including all diagnostics data for the beacon as well as any
        /// attachments on the beacon (including those belonging to other projects). This operation cannot be undone.
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        public class DeleteRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string beaconName)
                : base(service)
            {
                BeaconName = beaconName;
                InitParameters();
            }


            /// <summary>Beacon that should be deleted. A beacon name has the format "beacons/N!beaconId" where the
            /// beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values
            /// are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-
            /// EID beacons, you may use either the current EID or the beacon's "stable" UID. Required.</summary>
            [Google.Apis.Util.RequestParameterAttribute("beaconName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BeaconName { get; private set; }

            /// <summary>The project id of the beacon to delete. If not provided, the project that is making the request
            /// is used. Optional.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProjectId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/{+beaconName}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "beaconName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "beaconName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^beacons/[^/]+$",
                    });
                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Returns detailed information about the specified beacon.
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.
        ///
        /// Requests may supply an Eddystone-EID beacon name in the form: `beacons/4!beaconId` where the `beaconId` is
        /// the base16 ephemeral ID broadcast by the beacon. The returned `Beacon` object will contain the beacon's
        /// stable Eddystone-UID. Clients not authorized to resolve the beacon's ephemeral Eddystone-EID broadcast will
        /// receive an error.</summary>
        /// <param name="beaconName">Resource name of this beacon. A beacon name has the format "beacons/N!beaconId" where the
        /// beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3` for
        /// Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may use
        /// either the current EID or the beacon's "stable" UID. Required.</param>
        public virtual GetRequest Get(string beaconName)
        {
            return new GetRequest(service, beaconName);
        }

        /// <summary>Returns detailed information about the specified beacon.
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.
        ///
        /// Requests may supply an Eddystone-EID beacon name in the form: `beacons/4!beaconId` where the `beaconId` is
        /// the base16 ephemeral ID broadcast by the beacon. The returned `Beacon` object will contain the beacon's
        /// stable Eddystone-UID. Clients not authorized to resolve the beacon's ephemeral Eddystone-EID broadcast will
        /// receive an error.</summary>
        public class GetRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.Beacon>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string beaconName)
                : base(service)
            {
                BeaconName = beaconName;
                InitParameters();
            }


            /// <summary>Resource name of this beacon. A beacon name has the format "beacons/N!beaconId" where the
            /// beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values
            /// are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-
            /// EID beacons, you may use either the current EID or the beacon's "stable" UID. Required.</summary>
            [Google.Apis.Util.RequestParameterAttribute("beaconName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BeaconName { get; private set; }

            /// <summary>The project id of the beacon to request. If the project id is not specified then the project
            /// making the request is used. The project id must match the project that owns the beacon.
            /// Optional.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProjectId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/{+beaconName}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "beaconName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "beaconName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^beacons/[^/]+$",
                    });
                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Searches the beacon registry for beacons that match the given search criteria. Only those beacons
        /// that the client has permission to list will be returned.
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        public virtual ListRequest List()
        {
            return new ListRequest(service);
        }

        /// <summary>Searches the beacon registry for beacons that match the given search criteria. Only those beacons
        /// that the client has permission to list will be returned.
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        public class ListRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.ListBeaconsResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }


            /// <summary>A pagination token obtained from a previous request to list beacons.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Filter query string that supports the following field filters:
            ///
            /// * **description:`""`** For example: **description:"Room 3"** Returns beacons whose description matches
            /// tokens in the string "Room 3" (not necessarily that exact string). The string must be double-quoted. *
            /// **status:``** For example: **status:active** Returns beacons whose status matches the given value.
            /// Values must be one of the Beacon.Status enum values (case insensitive). Accepts multiple filters which
            /// will be combined with OR logic. * **stability:``** For example: **stability:mobile** Returns beacons
            /// whose expected stability matches the given value. Values must be one of the Beacon.Stability enum values
            /// (case insensitive). Accepts multiple filters which will be combined with OR logic. * **place\_id:`""`**
            /// For example: **place\_id:"ChIJVSZzVR8FdkgRXGmmm6SslKw="** Returns beacons explicitly registered at the
            /// given place, expressed as a Place ID obtained from [Google Places API](/places/place-id). Does not match
            /// places inside the given place. Does not consider the beacon's actual location (which may be different
            /// from its registered place). Accepts multiple filters that will be combined with OR logic. The place ID
            /// must be double-quoted. * **registration\_time`[<|>|<=|>=]`** For example:
            /// **registration\_time>=1433116800** Returns beacons whose registration time matches the given filter.
            /// Supports the operators: <, >, <=, and >=. Timestamp must be expressed as an integer number of seconds
            /// since midnight January 1, 1970 UTC. Accepts at most two filters that will be combined with AND logic, to
            /// support "between" semantics. If more than two are supplied, the latter ones are ignored. * **lat:` lng:
            /// radius:`** For example: **lat:51.1232343 lng:-1.093852 radius:1000** Returns beacons whose registered
            /// location is within the given circle. When any of these fields are given, all are required. Latitude and
            /// longitude must be decimal degrees between -90.0 and 90.0 and between -180.0 and 180.0 respectively.
            /// Radius must be an integer number of meters between 10 and 1,000,000 (1000 km). * **property:`"="`** For
            /// example: **property:"battery-type=CR2032"** Returns beacons which have a property of the given name and
            /// value. Supports multiple filters which will be combined with OR logic. The entire name=value string must
            /// be double-quoted as one string. * **attachment\_type:`""`** For example: **attachment_type:"my-namespace
            /// /my-type"** Returns beacons having at least one attachment of the given namespaced type. Supports "any
            /// within this namespace" via the partial wildcard syntax: "my-namespace". Supports multiple filters which
            /// will be combined with OR logic. The string must be double-quoted. * **indoor\_level:`""`** For example:
            /// **indoor\_level:"1"** Returns beacons which are located on the given indoor level. Accepts multiple
            /// filters that will be combined with OR logic.
            ///
            /// Multiple filters on the same field are combined with OR logic (except registration_time which is
            /// combined with AND logic). Multiple filters on different fields are combined with AND logic. Filters
            /// should be separated by spaces.
            ///
            /// As with any HTTP query string parameter, the whole filter expression must be URL-encoded.
            ///
            /// Example REST request: `GET
            /// /v1beta1/beacons?q=status:active%20lat:51.123%20lng:-1.095%20radius:1000`</summary>
            [Google.Apis.Util.RequestParameterAttribute("q", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Q { get; set; }

            /// <summary>The maximum number of records to return for this request, up to a server-defined upper
            /// limit.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>The project id to list beacons under. If not present then the project credential that made the
            /// request is used as the project. Optional.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProjectId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/beacons"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "q", new Google.Apis.Discovery.Parameter
                    {
                        Name = "q",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageSize", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageSize",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Registers a previously unregistered beacon given its `advertisedId`. These IDs are unique within
        /// the system. An ID can be registered only once.
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual RegisterRequest Register(Google.Apis.Proximitybeacon.v1beta1.Data.Beacon body)
        {
            return new RegisterRequest(service, body);
        }

        /// <summary>Registers a previously unregistered beacon given its `advertisedId`. These IDs are unique within
        /// the system. An ID can be registered only once.
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        public class RegisterRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.Beacon>
        {
            /// <summary>Constructs a new Register request.</summary>
            public RegisterRequest(Google.Apis.Services.IClientService service, Google.Apis.Proximitybeacon.v1beta1.Data.Beacon body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }


            /// <summary>The project id of the project the beacon will be registered to. If the project id is not
            /// specified then the project making the request is used. Optional.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProjectId { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Proximitybeacon.v1beta1.Data.Beacon Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "register"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/beacons:register"; }
            }

            /// <summary>Initializes Register parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Updates the information about the specified beacon. **Any field that you do not populate in the
        /// submitted beacon will be permanently erased**, so you should follow the "read, modify, write" pattern to
        /// avoid inadvertently destroying data.
        ///
        /// Changes to the beacon status via this method will be  silently ignored. To update beacon status, use the
        /// separate methods on this API for activation, deactivation, and decommissioning. Authenticate using an [OAuth
        /// access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is
        /// owner** or **Can edit** permissions in the Google Developers Console project.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="beaconName">Resource name of this beacon. A beacon name has the format "beacons/N!beaconId" where the
        /// beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3` for
        /// Eddystone, `1` for iBeacon, or `5` for AltBeacon.
        ///
        /// This field must be left empty when registering. After reading a beacon, clients can use the name for future
        /// operations.</param>
        public virtual UpdateRequest Update(Google.Apis.Proximitybeacon.v1beta1.Data.Beacon body, string beaconName)
        {
            return new UpdateRequest(service, body, beaconName);
        }

        /// <summary>Updates the information about the specified beacon. **Any field that you do not populate in the
        /// submitted beacon will be permanently erased**, so you should follow the "read, modify, write" pattern to
        /// avoid inadvertently destroying data.
        ///
        /// Changes to the beacon status via this method will be  silently ignored. To update beacon status, use the
        /// separate methods on this API for activation, deactivation, and decommissioning. Authenticate using an [OAuth
        /// access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is
        /// owner** or **Can edit** permissions in the Google Developers Console project.</summary>
        public class UpdateRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.Beacon>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Proximitybeacon.v1beta1.Data.Beacon body, string beaconName)
                : base(service)
            {
                BeaconName = beaconName;
                Body = body;
                InitParameters();
            }


            /// <summary>Resource name of this beacon. A beacon name has the format "beacons/N!beaconId" where the
            /// beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values
            /// are `3` for Eddystone, `1` for iBeacon, or `5` for AltBeacon.
            ///
            /// This field must be left empty when registering. After reading a beacon, clients can use the name for
            /// future operations.</summary>
            [Google.Apis.Util.RequestParameterAttribute("beaconName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string BeaconName { get; private set; }

            /// <summary>The project id of the beacon to update. If the project id is not specified then the project
            /// making the request is used. The project id must match the project that owns the beacon.
            /// Optional.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProjectId { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Proximitybeacon.v1beta1.Data.Beacon Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "update"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/{+beaconName}"; }
            }

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "beaconName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "beaconName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^beacons/[^/]+$",
                    });
                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "namespaces" collection of methods.</summary>
    public class NamespacesResource
    {
        private const string Resource = "namespaces";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public NamespacesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Lists all attachment namespaces owned by your Google Developers Console project. Attachment data
        /// associated with a beacon must include a namespaced type, and the namespace must be owned by your project.
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        public virtual ListRequest List()
        {
            return new ListRequest(service);
        }

        /// <summary>Lists all attachment namespaces owned by your Google Developers Console project. Attachment data
        /// associated with a beacon must include a namespaced type, and the namespace must be owned by your project.
        ///
        /// Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a
        /// signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console
        /// project.</summary>
        public class ListRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.ListNamespacesResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }


            /// <summary>The project id to list namespaces under. Optional.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProjectId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/namespaces"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Updates the information about the specified namespace. Only the namespace visibility can be
        /// updated.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="namespaceName">Resource name of this namespace. Namespaces names have the format:
        /// namespaces/namespace.</param>
        public virtual UpdateRequest Update(Google.Apis.Proximitybeacon.v1beta1.Data.Namespace body, string namespaceName)
        {
            return new UpdateRequest(service, body, namespaceName);
        }

        /// <summary>Updates the information about the specified namespace. Only the namespace visibility can be
        /// updated.</summary>
        public class UpdateRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.Namespace>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Proximitybeacon.v1beta1.Data.Namespace body, string namespaceName)
                : base(service)
            {
                NamespaceName = namespaceName;
                Body = body;
                InitParameters();
            }


            /// <summary>Resource name of this namespace. Namespaces names have the format:
            /// namespaces/namespace.</summary>
            [Google.Apis.Util.RequestParameterAttribute("namespaceName", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string NamespaceName { get; private set; }

            /// <summary>The project id of the namespace to update. If the project id is not specified then the project
            /// making the request is used. The project id must match the project that owns the beacon.
            /// Optional.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProjectId { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Proximitybeacon.v1beta1.Data.Namespace Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "update"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/{+namespaceName}"; }
            }

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "namespaceName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "namespaceName",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^namespaces/[^/]+$",
                    });
                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "v1beta1" collection of methods.</summary>
    public class V1beta1Resource
    {
        private const string Resource = "v1beta1";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public V1beta1Resource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets the Proximity Beacon API's current public key and associated parameters used to initiate the
        /// Diffie-Hellman key exchange required to register a beacon that broadcasts the Eddystone-EID format. This key
        /// changes periodically; clients may cache it and re-use the same public key to provision and register multiple
        /// beacons. However, clients should be prepared to refresh this key when they encounter an error registering an
        /// Eddystone-EID beacon.</summary>
        public virtual GetEidparamsRequest GetEidparams()
        {
            return new GetEidparamsRequest(service);
        }

        /// <summary>Gets the Proximity Beacon API's current public key and associated parameters used to initiate the
        /// Diffie-Hellman key exchange required to register a beacon that broadcasts the Eddystone-EID format. This key
        /// changes periodically; clients may cache it and re-use the same public key to provision and register multiple
        /// beacons. However, clients should be prepared to refresh this key when they encounter an error registering an
        /// Eddystone-EID beacon.</summary>
        public class GetEidparamsRequest : ProximitybeaconBaseServiceRequest<Google.Apis.Proximitybeacon.v1beta1.Data.EphemeralIdRegistrationParams>
        {
            /// <summary>Constructs a new GetEidparams request.</summary>
            public GetEidparamsRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }



            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getEidparams"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1beta1/eidparams"; }
            }

            /// <summary>Initializes GetEidparams parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }
}

namespace Google.Apis.Proximitybeacon.v1beta1.Data
{    

    /// <summary>Defines a unique identifier of a beacon as broadcast by the device.</summary>
    public class AdvertisedId : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The actual beacon identifier, as broadcast by the beacon hardware. Must be
        /// [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded
        /// (with padding) in responses. The base64 encoding should be of the binary byte-stream and not any textual
        /// (such as hex) representation thereof. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Specifies the identifier type. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A subset of attachment information served via the `beaconinfo.getforobserved` method, used when your
    /// users encounter your beacons.</summary>
    public class AttachmentInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An opaque data container for client-provided data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("data")]
        public virtual string Data { get; set; } 

        /// <summary>Specifies what kind of attachment this is. Tells a client how to interpret the `data` field. Format
        /// is namespace/type, for example scrupulous-wombat-12345/welcome-message</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namespacedType")]
        public virtual string NamespacedType { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Details of a beacon device.</summary>
    public class Beacon : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The identifier of a beacon as advertised by it. This field must be populated when registering. It
        /// may be empty when updating a beacon record because it is ignored in updates.
        ///
        /// When registering a beacon that broadcasts Eddystone-EID, this field should contain a "stable" Eddystone-UID
        /// that identifies the beacon and links it to its attachments. The stable Eddystone-UID is only used for
        /// administering the beacon.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("advertisedId")]
        public virtual AdvertisedId AdvertisedId { get; set; } 

        /// <summary>Resource name of this beacon. A beacon name has the format "beacons/N!beaconId" where the beaconId
        /// is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3` for
        /// Eddystone, `1` for iBeacon, or `5` for AltBeacon.
        ///
        /// This field must be left empty when registering. After reading a beacon, clients can use the name for future
        /// operations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("beaconName")]
        public virtual string BeaconName { get; set; } 

        /// <summary>Free text used to identify and describe the beacon. Maximum length 140 characters.
        /// Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Write-only registration parameters for beacons using Eddystone-EID (remotely resolved ephemeral ID)
        /// format. This information will not be populated in API responses. When submitting this data, the
        /// `advertised_id` field must contain an ID of type Eddystone-UID. Any other ID type will result in an
        /// error.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ephemeralIdRegistration")]
        public virtual EphemeralIdRegistration EphemeralIdRegistration { get; set; } 

        /// <summary>Expected location stability. This is set when the beacon is registered or updated, not
        /// automatically detected in any way. Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("expectedStability")]
        public virtual string ExpectedStability { get; set; } 

        /// <summary>The indoor level information for this beacon, if known. As returned by the Google Maps API.
        /// Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("indoorLevel")]
        public virtual IndoorLevel IndoorLevel { get; set; } 

        /// <summary>The location of the beacon, expressed as a latitude and longitude pair. This location is given when
        /// the beacon is registered or updated. It does not necessarily indicate the actual current location of the
        /// beacon. Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("latLng")]
        public virtual LatLng LatLng { get; set; } 

        /// <summary>The [Google Places API](/places/place-id) Place ID of the place where the beacon is deployed. This
        /// is given when the beacon is registered or updated, not automatically detected in any way.
        /// Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("placeId")]
        public virtual string PlaceId { get; set; } 

        /// <summary>Properties of the beacon device, for example battery type or firmware version. Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properties")]
        public virtual System.Collections.Generic.IDictionary<string,string> Properties { get; set; } 

        /// <summary>Some beacons may require a user to provide an authorization key before changing any of its
        /// configuration (e.g. broadcast frames, transmit power). This field provides a place to store and control
        /// access to that key. This field is populated in responses to `GET /v1beta1/beacons/3!beaconId` from users
        /// with write access to the given beacon. That is to say: If the user is authorized to write the beacon's
        /// confidential data in the service, the service considers them authorized to configure the beacon. Note that
        /// this key grants nothing on the service, only on the beacon itself.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("provisioningKey")]
        public virtual string ProvisioningKey { get; set; } 

        /// <summary>Current status of the beacon. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Project-specific data associated with a beacon.</summary>
    public class BeaconAttachment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Resource name of this attachment. Attachment names have the format:
        /// beacons/beacon_id/attachments/attachment_id. Leave this empty on creation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attachmentName")]
        public virtual string AttachmentName { get; set; } 

        /// <summary>The UTC time when this attachment was created, in milliseconds since the UNIX epoch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationTimeMs")]
        public virtual object CreationTimeMs { get; set; } 

        /// <summary>An opaque data container for client-provided data. Must be
        /// [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded
        /// (with padding) in responses. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("data")]
        public virtual string Data { get; set; } 

        /// <summary>Specifies what kind of attachment this is. Tells a client how to interpret the `data` field. Format
        /// is namespace/type. Namespace provides type separation between clients. Type describes the type of `data`,
        /// for use by the client when parsing the `data` field. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namespacedType")]
        public virtual string NamespacedType { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A subset of beacon information served via the `beaconinfo.getforobserved` method, which you call when
    /// users of your app encounter your beacons.</summary>
    public class BeaconInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID advertised by the beacon.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("advertisedId")]
        public virtual AdvertisedId AdvertisedId { get; set; } 

        /// <summary>Attachments matching the type(s) requested. May be empty if no attachment types were
        /// requested.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attachments")]
        public virtual System.Collections.Generic.IList<AttachmentInfo> Attachments { get; set; } 

        /// <summary>The name under which the beacon is registered.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("beaconName")]
        public virtual string BeaconName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a whole calendar date, e.g. date of birth. The time of day and time zone are either
    /// specified elsewhere or are not significant. The date is relative to the Proleptic Gregorian Calendar. The day
    /// may be 0 to represent a year and month where the day is not significant, e.g. credit card expiration date. The
    /// year may be 0 to represent a month and day independent of year, e.g. anniversary date. Related types are
    /// google.type.TimeOfDay and `google.protobuf.Timestamp`.</summary>
    public class Date : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a
        /// year/month where the day is not significant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("day")]
        public virtual System.Nullable<int> Day { get; set; } 

        /// <summary>Month of year. Must be from 1 to 12.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("month")]
        public virtual System.Nullable<int> Month { get; set; } 

        /// <summary>Year of date. Must be from 1 to 9999, or 0 if specifying a date without a year.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("year")]
        public virtual System.Nullable<int> Year { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response for a request to delete attachments.</summary>
    public class DeleteAttachmentsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The number of attachments that were deleted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("numDeleted")]
        public virtual System.Nullable<int> NumDeleted { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Diagnostics for a single beacon.</summary>
    public class Diagnostics : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An unordered list of Alerts that the beacon has.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alerts")]
        public virtual System.Collections.Generic.IList<string> Alerts { get; set; } 

        /// <summary>Resource name of the beacon. For Eddystone-EID beacons, this may be the beacon's current EID, or
        /// the beacon's "stable" Eddystone-UID.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("beaconName")]
        public virtual string BeaconName { get; set; } 

        /// <summary>The date when the battery is expected to be low. If the value is missing then there is no estimate
        /// for when the battery will be low. This value is only an estimate, not an exact date.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("estimatedLowBatteryDate")]
        public virtual Date EstimatedLowBatteryDate { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A
    /// typical example is to use it as the request or the response type of an API method. For instance:
    ///
    /// service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
    ///
    /// The JSON representation for `Empty` is empty JSON object `{}`.</summary>
    public class Empty : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Write-only registration parameters for beacons using Eddystone-EID format. Two ways of securely
    /// registering an Eddystone-EID beacon with the service are supported:
    ///
    /// 1. Perform an ECDH key exchange via this API, including a previous call to `GET /v1beta1/eidparams`. In this
    /// case the fields `beacon_ecdh_public_key` and `service_ecdh_public_key` should be populated and
    /// `beacon_identity_key` should not be populated. This method ensures that only the two parties in the ECDH key
    /// exchange can compute the identity key, which becomes a secret between them. 2. Derive or obtain the beacon's
    /// identity key via other secure means (perhaps an ECDH key exchange between the beacon and a mobile device or any
    /// other secure method), and then submit the resulting identity key to the service. In this case
    /// `beacon_identity_key` field should be populated, and neither of `beacon_ecdh_public_key` nor
    /// `service_ecdh_public_key` fields should be. The security of this method depends on how securely the parties
    /// involved (in particular the bluetooth client) handle the identity key, and obviously on how securely the
    /// identity key was generated.
    ///
    /// See [the Eddystone specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at
    /// GitHub.</summary>
    public class EphemeralIdRegistration : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The beacon's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is
        /// populated, `service_ecdh_public_key` must also be populated, and `beacon_identity_key` must not
        /// be.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("beaconEcdhPublicKey")]
        public virtual string BeaconEcdhPublicKey { get; set; } 

        /// <summary>The private key of the beacon. If this field is populated, `beacon_ecdh_public_key` and
        /// `service_ecdh_public_key` must not be populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("beaconIdentityKey")]
        public virtual string BeaconIdentityKey { get; set; } 

        /// <summary>The initial clock value of the beacon. The beacon's clock must have begun counting at this value
        /// immediately prior to transmitting this value to the resolving service. Significant delay in transmitting
        /// this value to the service risks registration or resolution failures. If a value is not provided, the default
        /// is zero.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("initialClockValue")]
        public virtual System.Nullable<ulong> InitialClockValue { get; set; } 

        /// <summary>An initial ephemeral ID calculated using the clock value submitted as `initial_clock_value`, and
        /// the secret key generated by the Diffie-Hellman key exchange using `service_ecdh_public_key` and
        /// `service_ecdh_public_key`. This initial EID value will be used by the service to confirm that the key
        /// exchange process was successful.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("initialEid")]
        public virtual string InitialEid { get; set; } 

        /// <summary>Indicates the nominal period between each rotation of the beacon's ephemeral ID. "Nominal" because
        /// the beacon should randomize the actual interval. See [the spec at
        /// github](https://github.com/google/eddystone/tree/master/eddystone-eid) for details. This value corresponds
        /// to a power-of-two scaler on the beacon's clock: when the scaler value is K, the beacon will begin
        /// broadcasting a new ephemeral ID on average every 2^K seconds.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rotationPeriodExponent")]
        public virtual System.Nullable<long> RotationPeriodExponent { get; set; } 

        /// <summary>The service's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field
        /// is populated, `beacon_ecdh_public_key` must also be populated, and `beacon_identity_key` must not
        /// be.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceEcdhPublicKey")]
        public virtual string ServiceEcdhPublicKey { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Information a client needs to provision and register beacons that broadcast Eddystone-EID format beacon
    /// IDs, using Elliptic curve Diffie-Hellman key exchange. See [the Eddystone
    /// specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at GitHub.</summary>
    public class EphemeralIdRegistrationParams : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Indicates the maximum rotation period supported by the service. See
        /// EddystoneEidRegistration.rotation_period_exponent</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxRotationPeriodExponent")]
        public virtual System.Nullable<long> MaxRotationPeriodExponent { get; set; } 

        /// <summary>Indicates the minimum rotation period supported by the service. See
        /// EddystoneEidRegistration.rotation_period_exponent</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minRotationPeriodExponent")]
        public virtual System.Nullable<long> MinRotationPeriodExponent { get; set; } 

        /// <summary>The beacon service's public key for use by a beacon to derive its Identity Key using Elliptic Curve
        /// Diffie-Hellman key exchange.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceEcdhPublicKey")]
        public virtual string ServiceEcdhPublicKey { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request for beacon and attachment information about beacons that a mobile client has encountered "in
    /// the wild".</summary>
    public class GetInfoForObservedBeaconsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies what kind of attachments to include in the response. When given, the response will
        /// include only attachments of the given types. When empty, no attachments will be returned. Must be in the
        /// format namespace/type. Accepts `*` to specify all types in all namespaces owned by the client.
        /// Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namespacedTypes")]
        public virtual System.Collections.Generic.IList<string> NamespacedTypes { get; set; } 

        /// <summary>The beacons that the client has encountered. At least one must be given.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("observations")]
        public virtual System.Collections.Generic.IList<Observation> Observations { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Information about the requested beacons, optionally including attachment data.</summary>
    public class GetInfoForObservedBeaconsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Public information about beacons. May be empty if the request matched no beacons.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("beacons")]
        public virtual System.Collections.Generic.IList<BeaconInfo> Beacons { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Indoor level, a human-readable string as returned by Google Maps APIs, useful to indicate which floor
    /// of a building a beacon is located on.</summary>
    public class IndoorLevel : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of this level.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing
    /// degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard.
    /// Values must be within normalized ranges.
    ///
    /// Example of normalization code in Python:
    ///
    /// def NormalizeLongitude(longitude): Wraps decimal degrees longitude to [-180.0, 180.0]. q, r = divmod(longitude,
    /// 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r
    ///
    /// def NormalizeLatLng(latitude, longitude): Wraps decimal degrees latitude and longitude to [-90.0, 90.0] and
    /// [-180.0, 180.0], respectively. r = latitude % 360.0 if r <= 90.0: return r, NormalizeLongitude(longitude) elif r
    /// >= 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude +
    /// 180.0)
    ///
    /// assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 ==
    /// NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) ==
    /// NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) ==
    /// NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) ==
    /// NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) ==
    /// NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) ==
    /// NormalizeLatLng(-270.0, 10.0)
    ///
    /// The code in logs/storage/validator/logs_validator_traits.cc treats this type as if it were annotated as
    /// ST_LOCATION.</summary>
    public class LatLng : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The latitude in degrees. It must be in the range [-90.0, +90.0].</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("latitude")]
        public virtual System.Nullable<double> Latitude { get; set; } 

        /// <summary>The longitude in degrees. It must be in the range [-180.0, +180.0].</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("longitude")]
        public virtual System.Nullable<double> Longitude { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to `ListBeaconAttachments` that contains the requested attachments.</summary>
    public class ListBeaconAttachmentsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The attachments that corresponded to the request params.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attachments")]
        public virtual System.Collections.Generic.IList<BeaconAttachment> Attachments { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response that contains list beacon results and pagination help.</summary>
    public class ListBeaconsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The beacons that matched the search criteria.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("beacons")]
        public virtual System.Collections.Generic.IList<Beacon> Beacons { get; set; } 

        /// <summary>An opaque pagination token that the client may provide in their next request to retrieve the next
        /// page of results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>Estimate of the total number of beacons matched by the query. Higher values may be less
        /// accurate.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalCount")]
        public virtual System.Nullable<long> TotalCount { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response that contains the requested diagnostics.</summary>
    public class ListDiagnosticsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The diagnostics matching the given request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("diagnostics")]
        public virtual System.Collections.Generic.IList<Diagnostics> Diagnostics { get; set; } 

        /// <summary>Token that can be used for pagination. Returned only if the request matches more beacons than can
        /// be returned in this response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to ListNamespacesRequest that contains all the project's namespaces.</summary>
    public class ListNamespacesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The attachments that corresponded to the request params.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namespaces")]
        public virtual System.Collections.Generic.IList<Namespace> Namespaces { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An attachment namespace defines read and write access for all the attachments created under it. Each
    /// namespace is globally unique, and owned by one project which is the only project that can create attachments
    /// under it.</summary>
    public class Namespace : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Resource name of this namespace. Namespaces names have the format: namespaces/namespace.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namespaceName")]
        public virtual string NamespaceName { get; set; } 

        /// <summary>Specifies what clients may receive attachments under this namespace via
        /// `beaconinfo.getforobserved`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("servingVisibility")]
        public virtual string ServingVisibility { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents one beacon observed once.</summary>
    public class Observation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID advertised by the beacon the client has encountered.
        ///
        /// If the submitted `advertised_id` type is Eddystone-EID, then the client must be authorized to resolve the
        /// given beacon. Otherwise no data will be returned for that beacon. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("advertisedId")]
        public virtual AdvertisedId AdvertisedId { get; set; } 

        /// <summary>The array of telemetry bytes received from the beacon. The server is responsible for parsing it.
        /// This field may frequently be empty, as with a beacon that transmits telemetry only occasionally.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("telemetry")]
        public virtual string Telemetry { get; set; } 

        /// <summary>Time when the beacon was observed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestampMs")]
        public virtual object TimestampMs { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
